操作DataGridView有兩種方式,一種是使用控件綁定的方式,操作的時候只要更改DataSet控件的數(shù)據(jù)集就能夠?qū)崿F(xiàn)DataGridView數(shù)據(jù)的靈活顯示;另一種方式是全部使用代碼來手工操作DataGridView控件的顯示,盡量少用控件,使代碼看起來更連貫,操作更靈活。
?? 控件方法來操作DataGridView控件:
?
?(控件方法略,比較簡單,拖控件,綁定即可)
?? 代碼方法來操作DataGridView控件
???? 通過上兩節(jié),老程序員對數(shù)據(jù)的簡單操作已經(jīng)很熟練了。現(xiàn)在在第一個實例“hello word!”的基礎(chǔ)上,繼續(xù)DataGridView控件的手工操作實習(xí)。
添加一個控件,文本命名如圖:
? ?
?? 我們在上面看到的數(shù)據(jù)顯示時這樣的:
? ?
??? 列的頭部是數(shù)據(jù)庫表的列段名,因為我們是將SQL查詢的數(shù)據(jù)集直接綁定到DataGridView控件的。
下來我們來改變它的頭部,同時,來指定DataGridView控件各個列綁定的數(shù)據(jù)成員。
??????? private void button4_Click(object sender, EventArgs e)
??????? {
??????????? //定義數(shù)據(jù)庫連接字符?????????
??????????? string str_con = @"Data Source=26-3B72903E783B/SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=testDB;";
?
??????????? //定義SQL語句字符串
??????????? string sql = "select * from danwei";
??????????? // string sql = string.Format("insert into danwei (danwei) values ('{0}')", textBox1.Text);
? ??????????//定義并實例化數(shù)據(jù)庫連接類型變量
??????????? SqlConnection conn = new SqlConnection(str_con);
?
??????????? //打開數(shù)據(jù)庫連接
??????????? conn.Open();
?
?
??????????? SqlCommand comm = new SqlCommand(sql, conn);
??????????? SqlDataAdapter da = new SqlDataAdapter(comm);
?
??????????? DataSet ds = new DataSet();
??????????? da.Fill(ds, "danwei");
?
??????????? dataGridView1.DataSource = ds;
??????????? dataGridView1.DataMember = "danwei";
?????????? //---------------以上代碼可以直接拷貝button3的代碼--------------------
?
???????????? //設(shè)置dataGridView1控件第一列的列頭文字
??????????? dataGridView1.Columns[0].HeaderText = "序號";
//設(shè)置dataGridView1控件第一列的列寬
??????????? dataGridView1.Columns[0].Width = 80;
?
?
//設(shè)置dataGridView1控件第二列的列頭文字
??????????? dataGridView1.Columns[1].HeaderText = "單位";
??????????? //設(shè)置dataGridView1控件第二列綁定的數(shù)據(jù)集中第一個數(shù)據(jù)表的第二列的數(shù)據(jù)
??????????? //前面說了,ds數(shù)據(jù)集是一個多表的集合
??????????? dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[1].ToString();
//設(shè)置dataGridView1控件第二列的列寬
??????????? dataGridView1.Columns[1].Width = 300;
?
??????????? conn.Close();
??????? }
???? 運行后,按下DataGridViewOpar按鈕顯示如下:
?
比較原來的;
??? 發(fā)現(xiàn)就是列頭變了,以及下面的滾動條長了,其實數(shù)據(jù)綁定了。可以將綁定值在代碼中互換一下,再看看;
??? 上面代碼改為:
private void button4_Click(object sender, EventArgs e)
??????? {
????????? ….//省略前面已有的代碼
??????????? dataGridView1.Columns[0].HeaderText = "序號";
??????????? dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();
??????????? dataGridView1.Columns[0].Width = 80;
?
??????????? dataGridView1.Columns[1].HeaderText = "單位";
??????????? dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();
??????????? dataGridView1.Columns[1].Width = 300;
}
?
運行后:
?
?
??? 單位和序號的值就換位置了。
???
??? 自動添加序號:
???? 動態(tài)添加數(shù)據(jù)的時候,有時候讀取數(shù)據(jù)庫的數(shù)據(jù)ID號不是順序的,這時就需要自己添加自動遞增的序號。
如圖:
??? 這里的序號不是序列的,中間跳了個2,做為統(tǒng)計到底有幾個單位不直觀。我們添加一段代碼:
private void button4_Click(object sender, EventArgs e)
??????? {
????????? ….//省略前面已有的代碼
dataGridView1.Columns[0].HeaderText = "序號";
??????????? //dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[1].ToString();
??????????? dataGridView1.Columns[0].Width = 80;
?
??????????? dataGridView1.Columns[1].HeaderText = "單位";
??????????? //dataGridView1.Columns[1].DataPropertyName = ds.Tables[0].Columns[0].ToString();
?????????? // dataGridView1.Columns[1].Width = 300;
?
//自動整理序列號
??????????? int coun = dataGridView1.RowCount;
??????????? for (int i = 0; i < coun - 1; i++)
??????????? {
??????????????? dataGridView1.Rows[i].Cells[0].Value = i + 1;
?????????????? ?dataGridView1.Rows[i].Cells["danweiid"].Value = i + 1;
??????????????
??????????? }
//因為第一個列值被修改了,所以后面的列值索引就從0開始
//所以單位的值應(yīng)該對應(yīng)的是第0列
dataGridView1.Columns[0].DataPropertyName = ds.Tables[0].Columns[0].ToString();
}
運行后,顯示:
?
?
?
綜上,老程序員已經(jīng)可以知道:
1,? DataGridView控件如何用代碼綁定數(shù)據(jù)集;
2,? DataGridView控件如何如果將指定的列綁定到數(shù)據(jù)集里的指定數(shù)據(jù)列;
3,? DataGridView控件如何動態(tài)編輯它的列值;
其實通過上面的實習(xí),老程序員已經(jīng)算很靈活的操作DataGridView了,不過為了在項目中更加順手,老程序員通過查找資料和測試,整理了DataGridView控件的用法詳解合集。附錄如下:
(以下代碼在如下情況下配置:添加一個ListBox控件,在里面顯示獲取到的值。添加一個button3按鈕控件,以下功能代碼均在該按鈕控件的Click事件下觸發(fā):)